package learn

import "fmt"

type file struct {
	name        string
	nonblock    bool // whether we set nonblocking mode
	stdoutOrErr bool // whether this is stdout or stderr
}

// File 文件: struct 的内嵌, file 是指针，File 的修改会影响到 file 的值
type File struct {
	*file // os specific
}

// File2 文件： struct 内嵌，file 的值的赋值，File2 的修改不会影响到 file 的值
type File2 struct {
	file
}

func testFile() {
	file1 := file{"test", false, false}

	file2 := File{&file{"test", false, false}}

	// 独立使用 file 和 File
	fmt.Println(file1.name)
	fmt.Println("----------------")
	fmt.Println(file2.name)
	fmt.Println(file2.file.name)
	file2.name = "modify2"
	fmt.Println(file2.name)
	fmt.Println(file2.file.name)

	// 使用 file 作为 File
	file3 := File{&file{}}
	file3.file = &file1
	fmt.Println(file1)
	fmt.Println(file3)
	file3.name = "file3"
	fmt.Println(file1.name)
	fmt.Println(file3.name)

	// 直接使用 file 新建 File
	file11 := file{"test", false, false}
	file4 := File{&file11}
	fmt.Println(file11)
	fmt.Println(file4.name)
	file4.name = "file4"
	fmt.Println(file11.name)
	fmt.Println(file4.name)

	// 不适用指针: File2 值的修改不会影响到 file
	file51 := file{"file51", false, false}
	file5 := File2{file51}
	fmt.Println(file51)
	fmt.Println(file5)
	fmt.Println(file5.name)
	file5.name = "modify--51"
	fmt.Println(file51)
	fmt.Println(file5)
	fmt.Println(file5.name)
}
